package com.divemotor.ventarepuestosinternet.service.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.divemotor.ventarepuestosinternet.beans.VehiculoBean;
import com.divemotor.ventarepuestosinternet.dao.UsuarioClienteDAO;
import com.divemotor.ventarepuestosinternet.dao.VehiculoDAO;
import com.divemotor.ventarepuestosinternet.dao.VehiculoExtraDAO;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Marca;
import com.divemotor.ventarepuestosinternet.model.Modelo;
import com.divemotor.ventarepuestosinternet.model.Usuario;
import com.divemotor.ventarepuestosinternet.model.UsuarioCliente;
import com.divemotor.ventarepuestosinternet.model.Vehiculo;
import com.divemotor.ventarepuestosinternet.model.VehiculoExtra;
import com.divemotor.ventarepuestosinternet.service.MisVehiculosService;
import com.divemotor.ventarepuestosinternet.util.Constantes;
import com.divemotor.ventarepuestosinternet.util.DatosDeSession;

@Service(value = "misVehiculosService")
@Transactional(rollbackFor=Exception.class)
public class MisVehiculosServiceImpl implements MisVehiculosService, Serializable {

	private static final long serialVersionUID = 1L;

	@Autowired
	private VehiculoDAO vehiculoDAO;
	@Autowired
	private VehiculoExtraDAO vehiculoExtraDAO;
	@Autowired
	private UsuarioClienteDAO usuarioClienteDAO;
	
	@Override
	public List<VehiculoBean> buscar(VehiculoBean vehiculoBean) throws DivemotorBusinessException {
		
		Usuario usuario = DatosDeSession.obtenerUsuarioAutenticado();
		UsuarioCliente usuarioCliente = new UsuarioCliente();
		usuarioCliente = usuarioClienteDAO.obtenerUsuarioClientePorUsuario(usuario);
		List<Vehiculo> listaVehiculos = new ArrayList<Vehiculo>();
		List<VehiculoExtra> listaVehiculosExtra = new ArrayList<VehiculoExtra>();
		
		listaVehiculos = vehiculoDAO.listarPorCliente(usuarioCliente.getCliente(),vehiculoBean);
		List<VehiculoBean> listaMisVehiculos = new ArrayList<VehiculoBean>();
		
		for (Vehiculo vehiculo : listaVehiculos) {
			VehiculoBean vehiculoBeanAgregar = new VehiculoBean();			
			vehiculoBeanAgregar.setModelo(vehiculo.getModelo());
			vehiculoBeanAgregar.setChasis(vehiculo.getChasis());
			vehiculoBeanAgregar.setPlaca(vehiculo.getPlaca());
			vehiculoBeanAgregar.setTipo(Constantes.VEHICULO_PROPIO);
			listaMisVehiculos.add(vehiculoBeanAgregar);
		}
		
		for (VehiculoExtra vehiculoExtra : listaVehiculosExtra) {
			VehiculoBean vehiculoBeanAgregar = new VehiculoBean();			
			vehiculoBeanAgregar.setModelo(vehiculoExtra.getModelo());
			vehiculoBeanAgregar.setChasis(vehiculoExtra.getChasis());
			vehiculoBeanAgregar.setPlaca(vehiculoExtra.getPlaca());
			vehiculoBeanAgregar.setIdVehiculoExtra(vehiculoExtra.getIdVehiculoExtra());
			vehiculoBeanAgregar.setTipo(Constantes.VEHICULO_EXTRA);
			listaMisVehiculos.add(vehiculoBeanAgregar);
		}
		return listaMisVehiculos;
	}

	@Override
	public List<VehiculoBean> listarVehiculosPorUsuario() throws DivemotorBusinessException {
		VehiculoBean vehiculoBean  = new VehiculoBean();
		vehiculoBean.setModelo(new Modelo(
            				Constantes.NO_SELECCIONADO.toString(),
            				Constantes.NO_SELECCIONADO.toString(),
            				Constantes.NO_SELECCIONADO.toString(),
            				Constantes.NO_SELECCIONADO_ETIQUETA));
		
		vehiculoBean.getModelo().setMarca(new Marca(Constantes.NO_SELECCIONADO.toString(),
            				Constantes.NO_SELECCIONADO_ETIQUETA));
		
		vehiculoBean.setTipo(Constantes.NO_SELECCIONADO.toString());
		return buscar(vehiculoBean);
	}

}
